package com.sicpa.system.service;

import com.sicpa.common.core.domain.AjaxResult;
import com.sicpa.common.core.domain.entity.AntiCounterfeitingRegisteredOffice;
import com.sicpa.common.core.domain.entity.SysUser;
import com.sicpa.common.core.page.TableDataInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * IAntiCounterfeitingRegisteredOffice
 *
 * @author lwf
 */
public interface IAntiCounterfeitingRegisteredOfficeService {

    /**
     * 上注协查询
     * @param office
     * @return
     */
    List<AntiCounterfeitingRegisteredOffice> scipaSelect(AntiCounterfeitingRegisteredOffice office);

    /**
     * 普通事务所查询
     * @param office
     * @return
     */
    List<AntiCounterfeitingRegisteredOffice> puSelect(AntiCounterfeitingRegisteredOffice office);

    /**
     * 组长查询
     * @param office
     * @param list
     * @return
     */
      List<AntiCounterfeitingRegisteredOffice> zuSelect(AntiCounterfeitingRegisteredOffice office,List<String> list);
    /**
     * 添加事务所
     *
     * @param office
     * @return
     */
    int add(AntiCounterfeitingRegisteredOffice office);

    /**
     * 修改事务所
     *
     * @param office
     * @return
     */
    AjaxResult edit(AntiCounterfeitingRegisteredOffice office);

    /**
     * 添加事务所普通用户
     * @param sysUser
     * @return
     */
    int addOfficeUser(SysUser sysUser);

    /**
     * 根据事务所id获取事务所
     *
     * @param officeId
     * @return
     */
    AntiCounterfeitingRegisteredOffice selectById(Long officeId);

    /**
     * 查询该事务所最大序号
     *
     * @param office
     * @return
     */
    public Map<String,Object> selectMaxSortOffice(AntiCounterfeitingRegisteredOffice office);

    /**
     * 判断在事务所登陆 下读取事务所是否为本事务所
     *
     * @return
     * @pararm office
     */
    int isOfficeData(AntiCounterfeitingRegisteredOffice office);


    /**
     * 事务所编号 获取审核事务所详情
     *
     * @param officeId 事务所编号
     * @return
     */
    AntiCounterfeitingRegisteredOffice getDetailByNumber(@Param("officeId") Long officeId);

    /**
     * 根据事务所id重置事务所账号密码
     *
     * @param officeId
     * @return
     */
    int resetPwdByOfficeId(Long officeId);

    /**
     * 导入事务所
     *
     * @param officeList
     * @return
     */
    Map<String, Object> importOffice(List<AntiCounterfeitingRegisteredOffice> officeList);

    /**
     * 批量删除事务所,状态为3, 未启用的可以删除,其他的不能删除
     *
     * @param officeIds
     * @return
     */
    int deleteOffices(Long[] officeIds);

    /**
     * 查询事务所组长管理的事务所id
     * @return
     */
    List<String> selectOfficeIdList();

    /**
     * 事务所组长查询
     * @param office
     * @param list
     * @return
     */
    List<Map<String, Object>> officeAdminSelect(AntiCounterfeitingRegisteredOffice office,List<String> list);

    /**
     * 普通事务所查询
     * @param office
     * @return
     */
    List<Map<String, Object>> officeSelect(AntiCounterfeitingRegisteredOffice office);

    /**
     * 上注协查询
     * @param office
     * @return
     */
    List<Map<String, Object>> adminSelect(AntiCounterfeitingRegisteredOffice office);

    /**
     * 事务所列表页面权限数据处理
     *
     * @param tableDataInfo
     * @param list
     * @return
     */
    TableDataInfo officePowerDataHander(TableDataInfo tableDataInfo, List<Map<String, Object>> list);

    /**
     * 修改事务所状态,状态为1的修改为2,状态为2的修改为1
     *
     * @param officeId 事务所id
     * @param status   状态id
     */
    int updateStatus(Long officeId, int status);

    /**
     * 审核事务所
     *
     * @param office 事务所实体
     * @return
     * @author wph 20200909
     */
    AjaxResult audit(AntiCounterfeitingRegisteredOffice office);

    /**
     * 查询事务所审核列表
     *
     * @param firmName              事务所名称
     * @param practiceCertificateNo 事务所执业证书编号
     * @param auditStatus           审核状态
     * @return TableDataInfo 待审核事务所列表
     * @author wph 20200909
     */
    List<Map<String, Object>> selectListAudit(String firmName, String practiceCertificateNo, Integer auditStatus);

    /**
     * 修改审核信息
     *
     * @param office 事务所实体类
     * @author wph 20200909
     */
    int updateAudit(AntiCounterfeitingRegisteredOffice office);

    /**
     * 根据事务所id加载事务所权限树
     *
     * @param officeId
     * @return
     */
    Map<String, Object> getOfficePowersByOfficeId(Long officeId);

    /**
     * 批量新增事务所权限
     *
     * @param officeId
     * @param powerIds
     */
    void saveOfficePowers(Long officeId, List<Long> powerIds);

    /**
     * 根据事务所ID 获取s审核事务所详情
     *
     * @param officeId 事务所id
     * @return
     */
    AntiCounterfeitingRegisteredOffice getDetailById(Long officeId);

    /**
     *
     *修改账号有效期
     * @param office
     * @return
     */
    int editValidity(AntiCounterfeitingRegisteredOffice office);
}
